package com.testing.class10.interfaceTest;

public class EmployerTest {
    public static void main(String[] args) {
        Employer will=new Tester();
        //Tester在实现接口的时候，重写实现的work方法。
        System.out.println(will.work());
        //有default实现的默认方法
        will.drink();
        will.moyu("上班看网页");
        //为什么？实现类Tester中新定义的writeCase用不了。
        //接口类型的引用指向实现类的对象，也会隐藏实现类新扩展的方法。类似向上转型。
//        em.writeCase();
        //只有将接口类型，转换为它的实现类类型的时候，才能重新使用隐藏起来的扩展的方法。
        ((Tester)will).writeCase();

        //通过实现类对象直接实例化
        Developer roy=new Developer();
        //通过接口完成实例化
        Employer dev=new Developer();

        //调用的时候，通过接口类型进行调用，只需要关注实现类是对应的接口即可。
        Boss tufei=new Boss();
        tufei.callExWork(will);
        tufei.callExWork(dev);
        //roy是一个Developer对象,实现了employer接口，调用的时候，能够自动转换。
        tufei.callExWork(roy);

        //注意，接口对象，在进行方法调用的时候，不能使用其它接口中的方法。
//        will.gotoWC();
        //需要转换为实现类对象才能进行调用
        ((Tester) will).gotoWC();
        //或者转换为其它接口的类型。
        ((HumanInter)will).gotoWC();
    }

}
